package org.biubiu0002.baiblog.core.service;

import org.biubiu0002.baiblog.core.model.dto.TokenUserDto;
import org.biubiu0002.baiblog.core.model.entity.SysUserEntity;
import org.biubiu0002.baiblog.core.model.vo.req.RegisterReqVo;
import org.biubiu0002.baiblog.core.model.vo.res.LoginResVo;
import org.biubiu0002.baiblog.core.model.vo.res.RegisterResVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @Author: biubiu0002
 * @Date: 2022-05-05 22:57
 **/
public interface AuthService {
    /**
     * 登录
     * @param sysUserEntity vo
     * @return resVo
     */
    LoginResVo login(SysUserEntity sysUserEntity);

    /**
     * 直接登录，用于Oauth2三方登录
     * @param uid 用户id
     * @return 登录响应
     */
    LoginResVo doLogin(String uid);

    /**
     * 注册
     * @param registerReqVo vo
     * @return 注册vo
     */
    RegisterResVo register(RegisterReqVo registerReqVo);

    /**
     * 根据token获取TokenUser信息
     * @param token 凭证token
     * @return
     */
    TokenUserDto getTokenUser(String token);

    /**
     * 设置Redis中的TokenUser信息
     * @param tokenUser tokenUser
     */
    void setTokenUser(TokenUserDto tokenUser);


    /**
     * 退出登录
     * @param request 请求
     */
    void logout(HttpServletRequest request);

    /**
     * 根据用户名获取用户
     * @param username 用户名
     * @return 用户
     */
    SysUserEntity getByUsername(String username);

    /**
     * 根据用户名模糊匹配
     * 匹配 '#{用户名}-%'
     * @param name 用户名
     * @return 匹配到的用户名列表
     */
    List<SysUserEntity> getByUsernameLike(String name);
}
